<!DOCTYPE html>
<!-- saved from url=(0041)http://mybatis.org/spring/zh/mappers.html -->
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta name="author" content="Hunter Presnall">
    <meta name="author" content="Eduardo Macarron">
    <meta name="author" content="Nan Lei">
    <meta name="Date-Revision-yyyymmdd" content="20200309">
    <meta http-equiv="Content-Language" content="zh">
    <title>mybatis-spring – MyBatis-Spring | 注入映射器</title>
    <link rel="stylesheet" href="./mybatis-spring – MyBatis-Spring _ 注入映射器_files/apache-maven-fluido-1.7.min.css">
    <link rel="stylesheet" href="./mybatis-spring – MyBatis-Spring _ 注入映射器_files/site.css">
    <link rel="stylesheet" href="./mybatis-spring – MyBatis-Spring _ 注入映射器_files/print.css" media="print">
    <script type="text/javascript" src="./mybatis-spring – MyBatis-Spring _ 注入映射器_files/apache-maven-fluido-1.7.min.js.下载"></script>
  </head>
  <body class="topBarDisabled">
    <div class="container-fluid">
      <div id="banner">
        <div class="pull-left"><div id="bannerLeft"><h2>mybatis-spring</h2>
</div>
</div>
        <div class="pull-right"><a href="http://mybatis.org/" id="bannerRight" title="MyBatis logo"><img src="./mybatis-spring – MyBatis-Spring _ 注入映射器_files/mybatis-logo.png" alt="MyBatis logo"></a></div>
        <div class="clear"><hr></div>
      </div>

      <div id="breadcrumbs">
        <ul class="breadcrumb">
        <li id="publishDate">最近更新: 09 三月 2020<span class="divider">|</span>
</li>
          <li id="projectVersion">版本: 2.0.4</li>
        </ul>
      </div>
      <div class="row-fluid">
        <div id="leftColumn" class="span2">
          <div class="well sidebar-nav">
    <ul class="nav nav-list">
      <li class="nav-header">参考文档</li>
    <li><a href="http://mybatis.org/spring/zh/index.html" title="简介"><span class="none"></span>简介</a></li>
    <li><a href="http://mybatis.org/spring/zh/getting-started.html" title="入门"><span class="none"></span>入门</a></li>
    <li><a href="http://mybatis.org/spring/zh/factorybean.html" title="SqlSessionFactoryBean"><span class="none"></span>SqlSessionFactoryBean</a></li>
    <li><a href="http://mybatis.org/spring/zh/transactions.html" title="事务"><span class="icon-chevron-right"></span>事务</a></li>
    <li><a href="http://mybatis.org/spring/zh/sqlsession.html" title="使用 SqlSession"><span class="icon-chevron-right"></span>使用 SqlSession</a></li>
    <li class="active"><a href="http://mybatis.org/spring/zh/mappers.html#"><span class="icon-chevron-down"></span>注入映射器</a>
    <ul class="nav nav-list">
    <li><a href="http://mybatis.org/spring/zh/mappers.html#register" title="注册映射器"><span class="none"></span>注册映射器</a></li>
    <li><a href="http://mybatis.org/spring/zh/mappers.html#scan" title="发现映射器"><span class="none"></span>发现映射器</a></li>
    </ul>
</li>
    <li><a href="http://mybatis.org/spring/zh/boot.html" title="使用 Spring Boot"><span class="none"></span>使用 Spring Boot</a></li>
    <li><a href="http://mybatis.org/spring/zh/using-api.html" title="使用 MyBatis API"><span class="none"></span>使用 MyBatis API</a></li>
    <li><a href="http://mybatis.org/spring/zh/batch.html" title="使用 Spring Batch"><span class="none"></span>使用 Spring Batch</a></li>
    <li><a href="http://mybatis.org/spring/zh/sample.html" title="示例代码"><span class="none"></span>示例代码</a></li>
      <li class="nav-header">项目文档</li>
    <li><a href="http://mybatis.org/spring/zh/project-info.html" title="项目信息"><span class="icon-chevron-right"></span>项目信息</a></li>
    <li><a href="http://mybatis.org/spring/zh/project-reports.html" title="项目报表"><span class="icon-chevron-right"></span>项目报表</a></li>
</ul>
          <hr>
          <div id="poweredBy">
            <div class="clear"></div>
            <div class="clear"></div>
            <div class="clear"></div>
            <div class="clear"></div>
<a href="http://maven.apache.org/" title="构建依靠 Maven" class="poweredBy"><img class="builtBy" alt="构建依靠 Maven" src="./mybatis-spring – MyBatis-Spring _ 注入映射器_files/maven-feather.png"></a>
            </div>
          </div>
        </div>
        <div id="bodyColumn" class="span10">


  
    <div class="section">
<h2><a name="a.E6.B3.A8.E5.85.A5.E6.98.A0.E5.B0.84.E5.99.A8"></a>注入映射器</h2>
      
<p>
        与其在数据访问对象（DAO）中手工编写使用 <tt>SqlSessionDaoSupport</tt> 或 <tt>SqlSessionTemplate</tt> 的代码，还不如让 Mybatis-Spring 为你创建一个线程安全的映射器，这样你就可以直接注入到其它的 bean 中了：
      </p>

      
<div class="source"><pre class="prettyprint"><span class="tag">&lt;bean</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"fooService"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"org.mybatis.spring.sample.service.FooServiceImpl"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;constructor-arg</span><span class="pln"> </span><span class="atn">ref</span><span class="pun">=</span><span class="atv">"userMapper"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;/bean&gt;</span></pre></div>

      
<p>
        注入完毕后，映射器就可以在你的应用逻辑代码中使用了：
      </p>
      
<div class="source"><pre class="prettyprint"><span class="kwd">public</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">FooServiceImpl</span><span class="pln"> </span><span class="kwd">implements</span><span class="pln"> </span><span class="typ">FooService</span><span class="pln"> </span><span class="pun">{</span><span class="pln">

  </span><span class="kwd">private</span><span class="pln"> </span><span class="kwd">final</span><span class="pln"> </span><span class="typ">UserMapper</span><span class="pln"> userMapper</span><span class="pun">;</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="typ">FooServiceImpl</span><span class="pun">(</span><span class="typ">UserMapper</span><span class="pln"> userMapper</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">this</span><span class="pun">.</span><span class="pln">userMapper </span><span class="pun">=</span><span class="pln"> userMapper</span><span class="pun">;</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">

  </span><span class="kwd">public</span><span class="pln"> </span><span class="typ">User</span><span class="pln"> doSomeBusinessStuff</span><span class="pun">(</span><span class="typ">String</span><span class="pln"> userId</span><span class="pun">)</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
    </span><span class="kwd">return</span><span class="pln"> </span><span class="kwd">this</span><span class="pun">.</span><span class="pln">userMapper</span><span class="pun">.</span><span class="pln">getUser</span><span class="pun">(</span><span class="pln">userId</span><span class="pun">);</span><span class="pln">
  </span><span class="pun">}</span><span class="pln">
</span><span class="pun">}</span></pre></div>
      
<p>
        注意代码中并没有任何的对 <tt>SqlSession</tt> 或 MyBatis 的引用。你也不需要担心创建、打开、关闭 session，MyBatis-Spring 将为你打理好一切。
      </p>

      <a name="register"></a>
<div class="section" id="register">
<h3><a name="a.E6.B3.A8.E5.86.8C.E6.98.A0.E5.B0.84.E5.99.A8"></a>注册映射器</h3>
        
<p>
          注册映射器的方法根据你的配置方法，即经典的 XML 配置或新的 3.0 以上版本的 Java 配置（也就是常说的 @Configuration），而有所不同。
        </p>

        
<div class="section">
<h4><a name="XML_.E9.85.8D.E7.BD.AE"></a>XML 配置</h4>

        
<p>
          在你的 XML 中加入 <tt>MapperFactoryBean</tt> 以便将映射器注册到 Spring 中。就像下面一样：
        </p>
        
<div class="source"><pre class="prettyprint"><span class="tag">&lt;bean</span><span class="pln"> </span><span class="atn">id</span><span class="pun">=</span><span class="atv">"userMapper"</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"org.mybatis.spring.mapper.MapperFactoryBean"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;property</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"mapperInterface"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"org.mybatis.spring.sample.mapper.UserMapper"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
  </span><span class="tag">&lt;property</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"sqlSessionFactory"</span><span class="pln"> </span><span class="atn">ref</span><span class="pun">=</span><span class="atv">"sqlSessionFactory"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;/bean&gt;</span></pre></div>

        
<p>
          如果映射器接口 UserMapper 在相同的类路径下有对应的 MyBatis XML 映射器配置文件，将会被 <tt>MapperFactoryBean</tt> 自动解析。不需要在 MyBatis 配置文件中显式配置映射器，除非映射器配置文件与接口类不在同一个类路径下。参考 <tt>SqlSessionFactoryBean</tt> 的 <tt><a href="http://mybatis.org/spring/zh/factorybean.html">configLocation</a></tt> 属性以获取更多信息。
        </p>

        
<p>
          注意 <tt>MapperFactoryBean</tt> 需要配置一个 <tt>SqlSessionFactory</tt> 或 <tt>SqlSessionTemplate</tt>。它们可以分别通过 <tt>sqlSessionFactory</tt> 和 <tt>sqlSessionTemplate</tt> 属性来进行设置。如果两者都被设置，<tt>SqlSessionFactory</tt> 将被忽略。由于 <tt>SqlSessionTemplate</tt> 已经设置了一个 session 工厂，<tt>MapperFactoryBean</tt> 将使用那个工厂。
        </p>

        </div>
<div class="section">
<h4><a name="Java_.E9.85.8D.E7.BD.AE"></a>Java 配置</h4>

        
<div class="source"><pre class="prettyprint"><span class="lit">@Bean</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="typ">MapperFactoryBean</span><span class="pun">&lt;</span><span class="typ">UserMapper</span><span class="pun">&gt;</span><span class="pln"> userMapper</span><span class="pun">()</span><span class="pln"> </span><span class="kwd">throws</span><span class="pln"> </span><span class="typ">Exception</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="typ">MapperFactoryBean</span><span class="pun">&lt;</span><span class="typ">UserMapper</span><span class="pun">&gt;</span><span class="pln"> factoryBean </span><span class="pun">=</span><span class="pln"> </span><span class="kwd">new</span><span class="pln"> </span><span class="typ">MapperFactoryBean</span><span class="pun">&lt;&gt;(</span><span class="typ">UserMapper</span><span class="pun">.</span><span class="kwd">class</span><span class="pun">);</span><span class="pln">
  factoryBean</span><span class="pun">.</span><span class="pln">setSqlSessionFactory</span><span class="pun">(</span><span class="pln">sqlSessionFactory</span><span class="pun">());</span><span class="pln">
  </span><span class="kwd">return</span><span class="pln"> factoryBean</span><span class="pun">;</span><span class="pln">
</span><span class="pun">}</span></pre></div>

      </div></div>

      <a name="scan"></a>
<div class="section" id="scan">
<h3><a name="a.E5.8F.91.E7.8E.B0.E6.98.A0.E5.B0.84.E5.99.A8"></a>发现映射器</h3>
        
<p>
          不需要一个个地注册你的所有映射器。你可以让 MyBatis-Spring 对类路径进行扫描来发现它们。
        </p>

        
<p>
          有几种办法来发现映射器：
        </p>
        
<ul>
          
<li>使用 <tt>&lt;mybatis:scan/&gt;</tt> 元素</li>
          
<li>使用 <tt>@MapperScan</tt> 注解</li>
          
<li>在经典 Spring XML 配置文件中注册一个 <tt>MapperScannerConfigurer</tt></li>
        </ul>

        
<p><tt>&lt;mybatis:scan/&gt;</tt> 和 <tt>@MapperScan</tt> 都在 MyBatis-Spring 1.2.0 中被引入。<tt>@MapperScan</tt> 需要你使用 Spring 3.1+。</p>

        
<p>
          Since 2.0.2, mapper scanning feature support a option (<tt>lazy-initialization</tt>)
          that control lazy initialization enabled/disabled of mapper bean.
          The motivation for adding this option is supporting a lazy initialization control feature supported by Spring Boot 2.2.
          The default of this option is <tt>false</tt> (= not use lazy initialization).
          If developer want to use lazy initialization for mapper bean, it should be set to the <tt>true</tt> expressly.
        </p>
        
<p>
          <span class="label important">IMPORTANT</span> If use the lazy initialization feature,
          the developer need to understand following limitations. If any of following conditions are matches,
          usually the lazy initialization feature cannot use on your application.
        </p>
        
<ul>
          
<li>When refers to the statement of <b>other mapper</b> using <tt>&lt;association&gt;</tt>(<tt>@One</tt>) and <tt>&lt;collection&gt;</tt>(<tt>@Many</tt>)</li>
          
<li>When includes to the fragment of <b>other mapper</b> using <tt>&lt;include&gt;</tt></li>
          
<li>When refers to the cache of <b>other mapper</b> using <tt>&lt;cache-ref&gt;</tt>(<tt>@CacheNamespaceRef</tt>)</li>
          
<li>When refers to the result mapping of <b>other mapper</b> using <tt>&lt;select resultMap="..."&gt;</tt>(<tt>@ResultMap</tt>)</li>
        </ul>

        
<p>
          <span class="label important">NOTE</span> However, It become possible to use it by simultaneously initializing dependent beans using <tt>@DependsOn</tt>(Spring's feature) as follow:
        </p>

        
<div class="source"><pre class="prettyprint"><span class="lit">@DependsOn</span><span class="pun">(</span><span class="str">"vendorMapper"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">interface</span><span class="pln"> </span><span class="typ">GoodsMapper</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">// ...</span><span class="pln">
</span><span class="pun">}</span></pre></div>

        
<div class="section">
<h4><a name="a.3Cmybatis:scan.2F.3E"></a>&lt;mybatis:scan/&gt;</h4>

        
<p>
          <tt>&lt;mybatis:scan/&gt;</tt> 元素会发现映射器，它发现映射器的方法与 Spring 内建的 <tt>&lt;context:component-scan/&gt;</tt> 发现 bean 的方法非常类似。
        </p>

        
<p>下面是一个 XML 配置样例：</p>

        
<div class="source"><pre class="prettyprint"><span class="tag">&lt;beans</span><span class="pln"> </span><span class="atn">xmlns</span><span class="pun">=</span><span class="atv">"http://www.springframework.org/schema/beans"</span><span class="pln">
  </span><span class="atn">xmlns:xsi</span><span class="pun">=</span><span class="atv">"http://www.w3.org/2001/XMLSchema-instance"</span><span class="pln">
  </span><span class="atn">xmlns:mybatis</span><span class="pun">=</span><span class="atv">"http://mybatis.org/schema/mybatis-spring"</span><span class="pln">
  </span><span class="atn">xsi:schemaLocation</span><span class="pun">=</span><span class="atv">"
  http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd
  http://mybatis.org/schema/mybatis-spring http://mybatis.org/schema/mybatis-spring.xsd"</span><span class="tag">&gt;</span><span class="pln">

  </span><span class="tag">&lt;mybatis:scan</span><span class="pln"> </span><span class="atn">base-package</span><span class="pun">=</span><span class="atv">"org.mybatis.spring.sample.mapper"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">

  </span><span class="com">&lt;!-- ... --&gt;</span><span class="pln">

</span><span class="tag">&lt;/beans&gt;</span></pre></div>

        
<p>
          <tt>base-package</tt> 属性允许你设置映射器接口文件的基础包。通过使用逗号或分号分隔，你可以设置多个包。并且会在你所指定的包中递归搜索映射器。
        </p>

        
<p>
          注意，不需要为 <tt>&lt;mybatis:scan/&gt;</tt> 指定 <tt>SqlSessionFactory</tt> 或 <tt>SqlSessionTemplate</tt>，这是因为它将使用能够被自动注入的 <tt>MapperFactoryBean</tt>。但如果你正在使用多个数据源（<tt>DataSource</tt>），自动注入可能不适合你。在这种情况下，你可以使用 <tt>factory-ref</tt> 或 <tt>template-ref</tt> 属性指定你想使用的 bean 名称。
        </p>

        
<p>
          <tt>&lt;mybatis:scan/&gt;</tt> 支持基于标记接口或注解的过滤操作。在 <tt>annotation</tt> 属性中，可以指定映射器应该具有的特定注解。而在 <tt>marker-interface</tt> 属性中，可以指定映射器应该继承的父接口。当这两个属性都被设置的时候，被发现的映射器会满足这两个条件。默认情况下，这两个属性为空，因此在基础包中的所有接口都会被作为映射器被发现。
        </p>

        
<p>
          被发现的映射器会按照 Spring 对自动发现组件的默认命名策略进行命名（参考 <a class="externalLink" href="https://docs.spring.io/spring/docs/current/spring-framework-reference/core.html#beans-scanning-name-generator">the Spring reference document(Core Technologies -Naming autodetected components-)</a>）。也就是说，如果没有使用注解显式指定名称，将会使用映射器的首字母小写非全限定类名作为名称。但如果发现映射器具有 @Component 或 JSR-330 标准中 @Named 注解，会使用注解中的名称作为名称。提醒一下，你可以设置 <tt>annotation</tt> 属性为你自定义的注解，然后在你的注解上设置 <tt>org.springframework.stereotype.Component</tt> 或 <tt>javax.inject.Named</tt>（需要使用 Java SE 6 以上）注解，这样你的注解既可以作为标记，也可以作为一个名字提供器来使用了。
        </p>

        
<p>
          <span class="label important">提示</span> <tt>&lt;context:component-scan/&gt;</tt> 无法发现并注册映射器。映射器的本质是接口，为了将它们注册到 Spring 中，发现器必须知道如何为找到的每个接口创建一个 <tt>MapperFactoryBean</tt>。
        </p>

        </div>
<div class="section">
<h4><a name="a.40MapperScan"></a>@MapperScan</h4>

        
<p>
          当你正在使用 Spring 的基于 Java 的配置时（也就是 @Configuration），相比于使用 <tt>&lt;mybatis:scan/&gt;</tt>，你会更喜欢用 <tt>@MapperScan</tt>。
        </p>

        
<p><tt>@MapperScan</tt> 注解的使用方法如下：</p>

        
<div class="source"><pre class="prettyprint"><span class="lit">@Configuration</span><span class="pln">
</span><span class="lit">@MapperScan</span><span class="pun">(</span><span class="str">"org.mybatis.spring.sample.mapper"</span><span class="pun">)</span><span class="pln">
</span><span class="kwd">public</span><span class="pln"> </span><span class="kwd">class</span><span class="pln"> </span><span class="typ">AppConfig</span><span class="pln"> </span><span class="pun">{</span><span class="pln">
  </span><span class="com">// ...</span><span class="pln">
</span><span class="pun">}</span></pre></div>

        
<p>
          这个注解具有与之前见过的 <tt>&lt;mybatis:scan/&gt;</tt> 元素一样的工作方式。它也可以通过 <tt>markerInterface</tt> 和 <tt>annotationClass</tt> 属性设置标记接口或注解类。通过配置 <tt>sqlSessionFactory</tt> 和 <tt>sqlSessionTemplate</tt> 属性，你还能指定一个 <tt>SqlSessionFactory</tt> 或 <tt>SqlSessionTemplate</tt>。
        </p>

    
<p>
      <span class="label important">NOTE</span> Since 2.0.4, If <tt>basePackageClasses</tt> or <tt>basePackages</tt> are not defined, scanning will occur from the package of the class that declares this annotation.
    </p>

        </div>
<div class="section">
<h4><a name="MapperScannerConfigurer"></a>MapperScannerConfigurer</h4>

        
<p>
          <tt>MapperScannerConfigurer</tt> 是一个 <tt>BeanDefinitionRegistryPostProcessor</tt>，这样就可以作为一个 bean，包含在经典的 XML 应用上下文中。为了配置 <tt>MapperScannerConfigurer</tt>，使用下面的 Spring 配置：
        </p>
        
<div class="source"><pre class="prettyprint"><span class="tag">&lt;bean</span><span class="pln"> </span><span class="atn">class</span><span class="pun">=</span><span class="atv">"org.mybatis.spring.mapper.MapperScannerConfigurer"</span><span class="tag">&gt;</span><span class="pln">
  </span><span class="tag">&lt;property</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"basePackage"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"org.mybatis.spring.sample.mapper"</span><span class="pln"> </span><span class="tag">/&gt;</span><span class="pln">
</span><span class="tag">&lt;/bean&gt;</span></pre></div>

        
<p>
          如果你需要指定 <tt>sqlSessionFactory</tt> 或 <tt>sqlSessionTemplate</tt>，那你应该要指定的是 <b>bean 名</b>而不是 bean 的引用，因此要使用 <tt>value</tt> 属性而不是通常的 <tt>ref</tt> 属性：
        </p>
        
<div class="source"><pre class="prettyprint"><span class="tag">&lt;property</span><span class="pln"> </span><span class="atn">name</span><span class="pun">=</span><span class="atv">"sqlSessionFactoryBeanName"</span><span class="pln"> </span><span class="atn">value</span><span class="pun">=</span><span class="atv">"sqlSessionFactory"</span><span class="pln"> </span><span class="tag">/&gt;</span></pre></div>

        
<p>
          <span class="label important">提示</span> 在 MyBatis-Spring 1.0.2 之前，<tt>sqlSessionFactoryBean</tt> 和
          <tt>sqlSessionTemplateBean</tt> 属性是唯一可用的属性。但由于 <tt>MapperScannerConfigurer</tt> 在启动过程中比 <tt>PropertyPlaceholderConfigurer</tt> 运行得更早，经常会产生错误。基于这个原因，上述的属性已被废弃，现在建议使用 <tt>sqlSessionFactoryBeanName</tt> 和 <tt>sqlSessionTemplateBeanName</tt> 属性。
        </p>
      </div></div>
    </div>
  

        </div>
      </div>
    </div>
    <hr>
    <footer>
      <div class="container-fluid">
        <div class="row-fluid">
            <p>Copyright ©2010–2020
<a href="http://www.mybatis.org/">MyBatis.org</a>.
All rights reserved.</p>
        </div>
      </div>
    </footer>
  

<div class="xl-chrome-ext-bar" id="xl_chrome_ext_{4DB361DE-01F7-4376-B494-639E489D19ED}" style="display: none;">
      <div class="xl-chrome-ext-bar__logo"></div>

      <a id="xl_chrome_ext_download" href="javascript:;" class="xl-chrome-ext-bar__option">下载视频</a>
      <a id="xl_chrome_ext_close" href="javascript:;" class="xl-chrome-ext-bar__close"></a>
    </div></body></html>